// 使用基本和 type 一致
// interface 可以重复的对某个接口来定义属性和方法；
// p而type定义的是别名，别名是不能重复的；
// 推荐 interface

interface i_info {
  readonly username: string;
  age: number;
  frind?: {
    age?: number;
    username: string;
  };
}

let obj: i_info = {
  username: "wxj",
  age: 18,
  frind: {
    username: "wxl",
  },
};

// obj.username="456"       // 不能修改

interface i_list {
  [index: number]: string;
}

let list = {
  1: "html",
  3: "css",
};

// 函数
interface i_fn {
  (num1: number, num2: number): number;
}

const add: i_fn = (num1: number, num2: number) => {
  return num1 + num2;
};
add(1, 2);

// 接口的继承
interface i_all extends i_fn, i_list {
  son: string;
}

// 使用接口定义 函数
interface i_fn1 {
  (num: number): number;
}

const fn: i_fn1 = (num: number) => {
  console.log(num);
  return num;
};

export {};
